package com.api.API.UserDataManager;

import com.api.POJO.UserDataManager.Data.User;
import com.api.POJO.UserDataManager.Data.UserGroup;
import com.api.POJO.UserDataManager.Data.UserPrivileges;
import com.api.POJO.UserDataManager.UserData;
import com.api.POJO.UserDataManager.Result.UserDataReturnMsg;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * @Description :用户数据信息管理模块接口API
 * @Author :崔昌赫
 * @Date : 2021/10/10
 */
@FeignClient("UserDataManager")
public interface UserDataManagerAPI {
    /**
     * 通过用户uid获取用户所有数据信息
     * @param uid 用户uid
     * @return 用户所有信息
     */
    @GetMapping("/users/get/info/uid/{uid}")
    UserDataReturnMsg findUserAllInfoByUid(@PathVariable String uid);

    /**
     * 通过用户email获取用户所有数据信息
     * @param email 用户email
     * @return 用户所有信息
     */
    @GetMapping("/users/get/info/email/{email}")
    UserDataReturnMsg findUserAllInfoByEmail(@PathVariable String email);

    /**
     * 通过用户uid获取用户基本信息
     * @param uid 用户uid
     * @return 用户基本信息
     */
    @GetMapping("/users/get/info/base/uid/{uid}")
    UserDataReturnMsg findUserBaseInfoByUid(@PathVariable String uid);

    /**
     * 通过用户email获取用户基本信息
     * @param email 用户email
     * @return 用户基本信息
     */
    @GetMapping("/users/get/info/base/email/{email}")
    UserDataReturnMsg findUserBaseInfoByEmail(@PathVariable String email);

    /**
     * 通过用户uid获取用户权限信息
     * @param uid 用户uid
     * @return 用户权限信息
     */
    @GetMapping("/users/get/privileges/uid/{uid}")
    UserDataReturnMsg findUserPrivilegesByUid(@PathVariable String uid);

    /**
     * 通过用户email获取用户权限信息
     * @param email 用户email
     * @return 用户权限信息
     */
    @GetMapping("/users/get/privileges/email/{email}")
    UserDataReturnMsg findUserPrivilegesByEmail(@PathVariable String email);

    /**
     * 通过用户uid获取用户所属用户组信息
     * @param uid 用户uid
     * @return 用户所属用户组信息
     */
    @GetMapping("/users/get/group/uid/{uid}")
    UserDataReturnMsg findUserGroupByUid(@PathVariable String uid);

    /**
     * 通过email获取用户所属用户组信息
     * @param email 用户email
     * @return 用户所属用户组信息
     */
    @GetMapping("/users/get/group/email/{email}")
    UserDataReturnMsg findUserGroupByEmail(@PathVariable String email);

    /**
     * 通过uid更新用户全部信息
     * @param uid 用户uid
     * @param userData 用户全部信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/info/uid/{uid}")
    UserDataReturnMsg updateUserAllInfoByUid(@PathVariable String uid, @RequestBody UserData userData);

    /**
     * 通过用户email更新用户全部信息
     * @param email 用户email
     * @param userData 用户全部信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/info/email/{email}")
    UserDataReturnMsg updateUserAllInfoByEmail(@PathVariable String email, @RequestBody UserData userData);

    /**
     * 通过用户uid更新用户基本信息
     * @param uid 用户uid
     * @param user 用户基本信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/info/base/uid/{uid}")
    UserDataReturnMsg updateUserBaseInfoByUid(@PathVariable String uid, @RequestBody User user);

    /**
     * 通过用户email更新用户基本信息
     * @param email 用户email
     * @param user 用户基本信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/info/base/email/{email}")
    UserDataReturnMsg updateUserBaseInfoByEmail(@PathVariable String email, @RequestBody User user);

    /**
     * 通过用户uid更新用户权限信息
     * @param uid 用户uid
     * @param userPrivileges 用户权限信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/privileges/uid/{uid}")
    UserDataReturnMsg updateUserPrivilegesByUid(@PathVariable String uid, @RequestBody UserPrivileges userPrivileges);

    /**
     * 通过用户email更新用户权限信息
     * @param email 用户email
     * @param userPrivileges 用户权限信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/privileges/email/{email}")
    UserDataReturnMsg updateUserPrivilegesByEmail(@PathVariable String email, @RequestBody UserPrivileges userPrivileges);

    /**
     * 通过用户uid更新用户所属用户组信息
     * @param uid 用户uid
     * @param userGroup 用户所属用户组信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/group/uid/{uid}")
    UserDataReturnMsg updateUserGroupByUid(@PathVariable String uid, @RequestBody UserGroup userGroup);

    /**
     * 通过用户email更新用户所属用户组信息
     * @param email 用户email
     * @param userGroup 用户所属用户组信息
     * @return 状态码及返回信息
     */
    @PutMapping("/users/update/group/email/{email}")
    UserDataReturnMsg updateUserGroupByEmail(@PathVariable String email, @RequestBody UserGroup userGroup);

    /**
     * 增加所有用户数据
     * @param userData 用户全部信息
     * @return 状态码及返回信息
     */
    @PostMapping("/users/add/info")
    UserDataReturnMsg addUserAllInfo(@RequestParam UserData userData);

    /**
     * 增加用户基本信息
     * @param user 用户基本信息
     * @return 状态码及返回值
     */
    @PostMapping("/users/add/info/base")
    UserDataReturnMsg addUserBaseInfo(@RequestBody User user);

    /**
     * 增加用户权限信息
     * @param userPrivileges 用户权限信息
     * @return 状态码及返回值
     */
    @PostMapping("/users/add/privileges")
    UserDataReturnMsg addUserPrivileges(@RequestBody UserPrivileges userPrivileges);

    /**
     * 增加用户所属用户组信息
     * @param userGroup 用户所属用户组信息
     * @return 状态码及返回值
     */
    @PostMapping("/users/add/group")
    UserDataReturnMsg addUserGroup(@RequestBody UserGroup userGroup);

    /**
     * 通过用户uid删除用户所有信息
     * @param uid 用户uid
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/info/uid/{uid}")
    UserDataReturnMsg deleteUserAllInfoByUid(@PathVariable String uid);

    /**
     * 通过用户email删除用户所有信息
     * @param email 用户email
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/info/email/{email}")
    UserDataReturnMsg deleteUserAllInfoByEmail(@PathVariable String email);

    /**
     * 通过uid删除用户基本信息
     * @param uid 用户uid
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/info/base/uid/{uid}")
    UserDataReturnMsg deleteUserBaseInfoByUid(@PathVariable String uid);

    /**
     * 通过用户email删除用户基本信息
     * @param email 用户email
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/info/base/email/{email}")
    UserDataReturnMsg deleteUserBaseInfoByEmail(@PathVariable String email);

    /**
     * 通过用户uid删除用户权限信息
     * @param uid 用户uid
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/privileges/uid/{uid}")
    UserDataReturnMsg deleteUserPrivilegesByUid(@PathVariable String uid);

    /**
     * 通过用户email删除用户权限信息
     * @param email 用户email
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/privileges/email/{email}")
    UserDataReturnMsg deleteUserPrivilegesByEmail(@PathVariable String email);

    /**
     * 通过用户uid删除用户所属用户组信息
     * @param uid 用户uid
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/group/uid/{uid}")
    UserDataReturnMsg deleteUserGroupByUid(@PathVariable String uid);

    /**
     * 通过用户email删除用户所属用户组信息
     * @param email 用户email
     * @return 状态码及返回值
     */
    @DeleteMapping("/users/delete/group/email/{email}")
    UserDataReturnMsg deleteUserGroupByEmail(@PathVariable String email);

}
